package cn.tedu.system.base.files;

import cn.tedu.system.base.response.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/v1/file/")
public class UploadController {
    /**
     * 1.上传文件功能
     *
     * @param file 前端提交的文件
     * @return
     * @throws IOException
     */
    @PostMapping("upload")
    public JsonResult upload(MultipartFile file) throws IOException {
        log.debug("上传文件参数:{}", file);
        System.out.println("------------" + file);
        //最终目标: d:/files/2024/10/19/zhly.jpg
        /****************第1步:处理文件名****************/
        //原始文件名字:zhly.jpg
        String fileName = file.getOriginalFilename();
        //获取文件的后缀名[.jpg]
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        //生成一个全球唯一的随机字符串,作为新的文件名
        fileName = UUID.randomUUID() + suffix;

        /**************第2步:处理路径**************/
        //目标: d:/files/2024/10/19/
        //String dirPath = "d:/files";
        String dirPath = "d:/files/";

        //自定义一个日期路径作为文件存储的文件夹,提高检索性能,一般以年月日的格式存储,比如:/2024/10/19
        SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
        //将当前的实际日期转为上面的时间格式;
        String datePath = sdf.format(new Date());

        /*************第3步:创建对应的目录**********/
        File dirFile = new File(dirPath + datePath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }
        /*************第4步:拼接文件完整路径并保存到磁盘*********/
        String filePath = dirPath + datePath + fileName;
        file.transferTo(new File(filePath));

        /*************第5步:返回响应*********************/
        //返回: /2024/10/19/xxx.jpg 给到前端, 前端拼接成完整的文件路径
        //完整的文件路径 http://localhost:8080/2024/10/19/xxx.jpg
        //此处没有d:/files,因为后期会把该路径设置为工程的静态文件的根路径

        String url = "http://localhost:8080"+datePath + fileName;
        log.debug("返回文件路径:{}",url);
        return JsonResult.ok(url);
//        log.debug("创建的文件路径:{}",filePath);
//        log.debug("返回的文件路径:{}",datePath + fileName);
//        return JsonResult.ok(datePath + fileName);
    }

    /**
     * 2.删除图片功能
     *
     * @param imgUrl
     * @return
     */
    @PostMapping("remove")
    public JsonResult remove(String imgUrl){
        log.debug("删除图片请求参数:{}",imgUrl);
        new File("d:/files"+imgUrl).delete();
        return JsonResult.ok();
    }
}


/*package cn.tedu.system.base.files;

import cn.tedu.system.base.response.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/v1/file/")
public class UploadController {

    // 文件存储基础路径
    private static final String BASE_PATH = "d:/files/policy_attachments/";

    @PostMapping("upload")
    public JsonResult upload(MultipartFile file) throws IOException {
        log.debug("上传文件参数:{}", file);

        // 处理文件名
        String originalName = file.getOriginalFilename();
        String suffix = originalName.substring(originalName.lastIndexOf("."));
        String newFileName = UUID.randomUUID() + suffix;

        // 处理路径
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
        String datePath = sdf.format(new Date());
        File dirFile = new File(BASE_PATH + datePath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();
        }

        // 保存文件
        String filePath = BASE_PATH + datePath + newFileName;
        file.transferTo(new File(filePath));

        // 返回相对路径，供数据库存储使用
        return JsonResult.ok("/policy_attachments/" + datePath + newFileName);
    }
}*/
